unit Principal;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ExtCtrls, IniFiles, jpeg, StdCtrls;

type
  TFormPrincipal = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    StatusBar1: TStatusBar;
    StatusBar2: TStatusBar;
    Panel10: TPanel;
    Panel38: TPanel;
    Panel39: TPanel;
    Panel4: TPanel;
    Panel5: TPanel;
    Panel6: TPanel;
    Panel7: TPanel;
    Panel8: TPanel;
    Panel9: TPanel;
    Panel15: TPanel;
    Panel14: TPanel;
    Panel13: TPanel;
    Panel12: TPanel;
    Panel11: TPanel;
    Panel3: TPanel;
    Panel21: TPanel;
    Panel20: TPanel;
    Panel19: TPanel;
    Panel18: TPanel;
    Panel17: TPanel;
    Panel16: TPanel;
    Panel40: TPanel;
    Panel37: TPanel;
    Panel36: TPanel;
    Panel35: TPanel;
    Panel34: TPanel;
    Panel33: TPanel;
    Panel32: TPanel;
    Panel31: TPanel;
    Panel30: TPanel;
    Panel29: TPanel;
    Panel28: TPanel;
    Panel27: TPanel;
    Panel26: TPanel;
    Panel25: TPanel;
    Panel24: TPanel;
    Panel23: TPanel;
    Panel22: TPanel;
    Panel41: TPanel;
    Panel42: TPanel;
    Panel43: TPanel;
    Panel44: TPanel;
    Panel45: TPanel;
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    procedure Panel4Click(Sender: TObject);
    procedure Panel23Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Panel24Click(Sender: TObject);
    procedure Panel25Click(Sender: TObject);
    procedure Panel26Click(Sender: TObject);
    procedure Panel27Click(Sender: TObject);
    procedure Panel29Click(Sender: TObject);
    procedure Panel30Click(Sender: TObject);
    procedure Panel31Click(Sender: TObject);
    procedure Panel32Click(Sender: TObject);
    procedure Panel33Click(Sender: TObject);
    procedure Panel34Click(Sender: TObject);
    procedure Panel35Click(Sender: TObject);
    procedure Panel37Click(Sender: TObject);
    procedure Panel41Click(Sender: TObject);
    procedure Panel44Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
        procedure HourGlass;
        procedure Default;
  public
    { Public declarations }
    LMF, ArqMFD:char;
  end;
  type
        RegDecompoeAliquota = record
        Tipo: Char;
        Indice: Char;
        Taxa: Array[0..3] of char ;
        Separador: Char ;
    end;

  type
        RegTaxaAliquota = record
        Taxa: Array[0..3] of char ;
        Separador: Char ;
    end;

    type
        RegDescricaoFormasPagamento = record
        Legenda: Array[0..15] of char ;
        Separador: Char ;
    end;
    type
        RegDescricaoNaoFiscal = record
        Legenda: Array[0..14] of char ;
        Separador: Char ;
    end;
    type
        RegDescricaoRelatorio = record
        Legenda: Array[0..18] of char ;
        Separador: Char ;
    end;
    type
        RegTotaisFPagto = record
        Legenda: Array[0..15] of char ;
        Acumulado: Array[0..19] of char ;
        ValorCupom: Array[0..19] of char ;
        Vinculado: Char ;
        Separador: Char ;
    end;

    type RegTotaisAliquotas = record
         Tipo:char;
         Taxa: Array[0..3] of char;
         Totalizador: Array[0..13] of char;
    end;

    type
        RegTotaisdaVenda = record
        DescontoICMS: Array[0..13] of char ;
        DescontoISS: Array[0..13] of char ;
        AcrescimoICMS: Array[0..13] of char ;
        AcrescimoISS: Array[0..13] of char ;
        CancelamentoICMS: Array[0..13] of char ;
        CancelamentoISS: Array[0..13] of char ;
        VLICMS: Array[0..13] of char ;
        VLISS: Array[0..13] of char ;
        VBICMS: Array[0..13] of char ;
        VBISS: Array[0..13] of char ;
        QtdeAliq: Array[0..2]of char ;
        Aliquotas: Array[0..15] of RegTotaisAliquotas;
        FINICMS:Array[0..2] of Array[0..18] of char;
        FINISS:Array[0..2] of Array[0..18] of char;
        DescontoNaoFiscal: Array[0..13] of char ;
        AcrescimoNaoFiscal: Array[0..13] of char ;
        CancelamentoNaoFiscal: Array[0..13] of char ;
    end;

    type RegTotaisNaoFiscais= record
         Descricao: Array[0..18] of char;
         Valor: Array[0..14] of char;
    end;

const
Mens_St1:Array[0..7] of String=('Número de Parâmetros do comando inválido',
                       'Cupom Fiscal Aberto',
                       'Comando inexistente',
                       'Irrelevante',
                       'Impressora em erro',
                       'Erro de relógio',
                       'Pouco papel',
                       'Fim de papel');

Mens_St2:Array[0..6] of String=('Comando não executado',
                                'CNPJ do Proprietário não cadastrado',
                                'Cancelamento não permitido',
                                'Alíquota não programada',
                                'Erro de memória',
                                'Memória Fiscal cheia',
                                'Tipo de parâmetro de comando inválido');

var
  FormPrincipal: TFormPrincipal;
  Resposta: integer;
  Aliquotas_ICMS_ISS: array[1..30] of RegTaxaAliquota; //copia o conteudo da funcao ECF_RetornoAliquotas
  MeiosPagamento: array[1..16] of RegDescricaoFormasPagamento; //copia o conteudo da funcao
  Conteudo:Array[0..3020] of char; // Conteudo de retorno das funções de status
  virgula:integer;
  NaoFiscais:Array[1..16] of RegDescricaoNaoFiscal; // Legendas de Operações não fiscais
  RelatorioGer: array[1..28] of RegDescricaoRelatorio; // Nomes dos Relatorios Gerencias
  TotaisPagamento:Array[1..50] of RegTotaisFPagto; // Totais dos Meios de Pagamento
  cTributacoes:Array[1..20] of RegdecompoeAliquota;
  TotaisX:RegTotaisdaVenda;
  totaisNaoFiscais: Array[1..28] of RegTotaisNaofiscais;


implementation

uses funcoesapoio, declaracoes, LMFC, EspelhoMFD, MovimentoPorECF,
  MeiosPagamento, DavEmitido, VendasdoPeriodo;
{$R *.dfm}

procedure TFormPrincipal.Panel4Click(Sender: TObject);
begin
        LimpaMensagem1;
        Statusbar1.Panels[0].Text:='Leitura X'; WaitProcess;

        Resposta:= ECF_LeituraX;
        VerificaRetornoFuncao(Resposta);

end;

procedure TFormPrincipal.Panel23Click(Sender: TObject);
begin
        LimpaMensagem1;
        StatusBar1.Panels[0].Text:='LMFC'; Refresh;
        LMF:='C';
        FormLMFC.ShowModal;
end;

procedure TFormPrincipal.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
        ECF_FechaPortaSerial();
end;

procedure TFormPrincipal.Panel24Click(Sender: TObject);
begin
        LimpaMensagem1;
        StatusBar1.Panels[0].Text:='LMFS'; Refresh;
        LMF:='S';
        FormLMFC.ShowModal;

end;

procedure TFormPrincipal.Panel25Click(Sender: TObject);
begin
        LimpaMensagem1;
        ArqMFD:='E';
        FormEspelho.Showmodal;
end;

procedure TFormPrincipal.Panel26Click(Sender: TObject);
begin
        LimpaMensagem1;
        ArqMFD:='C';
        FormEspelho.Showmodal;
end;

procedure TFormPrincipal.Panel27Click(Sender: TObject);
begin
        MessageDlg('Esta função deverá ser criada pelo software aplicativo.'+chr(13)+
                   'Não se relaciona com a Impressora Fiscal.' , mtInformation, [mbOk], 0);
        LimpaMensagem1;

end;

procedure TFormPrincipal.Panel29Click(Sender: TObject);
begin
        LimpaMensagem1;
        FormMovPorECF.ShowModal;
end;

procedure TFormPrincipal.Panel30Click(Sender: TObject);
begin
        LimpaMensagem1;
        FormMeiosPagto.ShowModal;
end;

procedure TFormPrincipal.Panel31Click(Sender: TObject);
begin
        MessageDlg('Esta função NÃO deverá ser executada por PAF-ECF para estabelecimento do tipo bares e restaurantes. '+chr(13)
                      , mtInformation, [mbOK], 0);
        LimpaMensagem1;
        StatusBar1.Panels[0].Text:='DAV Emitidos'; Refresh;
        FormDav.Showmodal;
end;

procedure TFormPrincipal.Panel32Click(Sender: TObject);
begin
      StatusBar1.Panels[0].Text:='Controle de Encerrantes'; Refresh;
      MessageDlg('Esta função deverá ser executada por PAF-ECF para estabelecimento revendedor varejista '+chr(13)+
                     'de combustível automotivo.' + chr(13)+
                 'Geração de arquivo eletrônico conforme layout estabelecido no ANEXO IX da ERT-PAF-ECF.'+chr(13)
                 , mtInformation, [mbOK], 0);
        LimpaMensagem1;
end;

procedure TFormPrincipal.Panel33Click(Sender: TObject);
begin
        MessageDlg('Esta função deverá ser executada APENAS por PAF-ECF para estabelecimento do tipo bares e restaurantes. '+chr(13)
                      , mtInformation, [mbOK], 0);
        LimpaMensagem1;
        StatusBar1.Panels[0].Text:='Transferência de mesas'; Refresh;
        FormPrincipal.HourGlass;
        HabilitaDesabilitaItensMenu(0);
        Resposta:=ECF_AbreRelatorioGerencial();
        VerificaRetornoFuncao(Resposta);
        if Resposta = 1 then begin
            Resposta:=ECF_RelatorioGerencial(#16+'N'+#16+'V'+'           TRANSFERÊNCIA ENTRE MESAS');
            Resposta:=ECF_RelatorioGerencial('  ');
            Resposta:=ECF_RelatorioGerencial(#16+'C'+'Or:001 Dest:002 Refrigerante lata 300ml  1UN R$    3,80');
            Resposta:=ECF_RelatorioGerencial(#16+'C'+'Or:001 Dest:002 Refrigerante lata 300ml  1UN R$    3,80');
            Resposta:=ECF_RelatorioGerencial(#16+'C'+'Or:001 Dest:002 Pizza Marguerita         1UN R$   22,00');
            Resposta:=ECF_FechaRelatorioGerencial();
            VerificaRetornoFuncao(Resposta);
        end;
        HabilitaDesabilitaItensMenu(1);
        FormPrincipal.Default;
end;

procedure TFormPrincipal.Panel34Click(Sender: TObject);
begin
        MessageDlg('Esta função deverá ser executada APENAS por PAF-ECF para estabelecimento do tipo bares e restaurantes. '+chr(13)
                      , mtInformation, [mbOK], 0);
        LimpaMensagem1;
        StatusBar1.Panels[0].Text:='Mesas Abertas'; Refresh;
        FormPrincipal.HourGlass;
        HabilitaDesabilitaItensMenu(0);
        Resposta:=ECF_AbreRelatorioGerencial();
        VerificaRetornoFuncao(Resposta);
        if Resposta = 1 then begin
            Resposta:=ECF_RelatorioGerencial(#16+'N'+#16+'E'+'   MESAS ABERTAS');
            Resposta:=ECF_RelatorioGerencial('  ');
            Resposta:=ECF_RelatorioGerencial(#16+'N'+'MESA:002 22/06/2010 18:05:00'+#10);
            Resposta:=ECF_RelatorioGerencial(#16+'C'+'Refrigerante lata 300ml  2UN '+#10);
            Resposta:=ECF_RelatorioGerencial(#16+'C'+'Pizza Marguerita         1UN '+#10+#10);
            Resposta:=ECF_RelatorioGerencial(#16+'N'+'MESA:003 22/06/2010 18:50:01'+#10);
            Resposta:=ECF_RelatorioGerencial(#16+'C'+'Chopp Claro 180 ml       2UN '+#10);
            Resposta:=ECF_RelatorioGerencial(#16+'C'+'Porção de Batata Frita   1UN '+#10);
            Resposta:=ECF_FechaRelatorioGerencial();
            VerificaRetornoFuncao(Resposta);
        end;
        FormPrincipal.Default;
        HabilitaDesabilitaItensMenu(1);
end;

procedure TFormPrincipal.Panel35Click(Sender: TObject);
begin
        MessageDlg('Esta função não se aplica à SWEDA. '+chr(13)+
                   'APENAS para ECF do tipo Bilhete de Passagem. '+chr(13)
                      , mtInformation, [mbOK], 0);
        LimpaMensagem1;

end;

procedure TFormPrincipal.Panel37Click(Sender: TObject);
var Relatorio:TRichEdit;
    i:integer;
begin
        LimpaMensagem1;
        StatusBar1.Panels[0].Text:='Identificação do PAF-ECF'; Refresh;
        FormPrincipal.HourGlass;
        HabilitaDesabilitaItensMenu(0);
        //Monta Relatorio
        Relatorio:=TRichEdit.Create(self);
        Relatorio.Parent := Twincontrol(FormPrincipal);
        Relatorio.Visible := False;
        Relatorio.Width := 500;
        Relatorio.Font.Name := 'Courier New';
        Relatorio.Align := alClient;
        Relatorio.Lines.Add(#16+'E'+'IDENTIFICAÇÃO DO PAF-ECF ');
        Relatorio.Lines.Add(' ');
        Relatorio.Lines.Add(#16+'N'+'     Laudo Nº: LAUDO-PAF-ECF');
        Relatorio.Lines.Add(' ');
        Relatorio.Lines.Add(#16+'B'+'    IDENTIFICAÇÃO DA EMPRESA DESENVOLVEDORA'+#16+'N');
        Relatorio.Lines.Add(#16+'C'+'         CNPJ: 99.999.999/9999-99');
        Relatorio.Lines.Add(#16+'C'+' RAZÃO SOCIAL: RAZÃO SOCIAL DA EMPRESA');
        Relatorio.Lines.Add(#16+'C'+'     ENDEREÇO: ENDEREÇO DA EMPESA');
        Relatorio.Lines.Add(#16+'C'+'     TELEFONE: (99) 9999-9999');
        Relatorio.Lines.Add(#16+'C'+'      CONTATO: NOME DO CONTATO'+#16+'N');
        Relatorio.Lines.Add(' ');
        Relatorio.Lines.Add(' ');
        Relatorio.Lines.Add(#16+'B'+'        IDENTIFICAÇÃO DO PAF-ECF'+#16+'N');
        Relatorio.Lines.Add(#16+'C'+'      NOME COMERCIAL: Nome Comercial do PAF-ECF' );
        Relatorio.Lines.Add(#16+'C'+'              VERSÃO: Versão do PAF-ECF');
        Relatorio.Lines.Add(#16+'C'+'PRINCIPAL EXECUTAVEL: ARQUIVO EXECUTÁVEL');
        Relatorio.Lines.Add(#16+'C'+'          CÓDIGO MD5: CóDIGO MD5');
        Relatorio.Lines.Add(#16+'C'+'OUTROS ARQUIVOS UTILIZADOS: ');
        Relatorio.Lines.Add(#16+'C'+'Nº Fabricação ECF Autorizado:SW041000000000000001');

        Resposta:=ECF_AbreRelatorioGerencial();
        VerificaRetornoFuncao(Resposta);
        if Resposta = 1 then begin
                i:=1;
                While i<Length(Relatorio.Text) do
                begin
                        Resposta:=ECF_RelatorioGerencial(Copy(Relatorio.Text,i,618));
                        i:=i+618;
                end;
                Resposta:=ECF_FechaRelatorioGerencial();
                VerificaRetornoFuncao(Resposta);
        end;
        FormPrincipal.Default;
        HabilitaDesabilitaItensMenu(1);

end;

procedure TFormPrincipal.Panel41Click(Sender: TObject);
begin
        LimpaMensagem1;
        FormVendasdoPeriodo.Showmodal;
end;

procedure TFormPrincipal.HourGlass;

begin
        Panel22.Cursor:=crHourGlass;
        Panel23.Cursor:=crHourGlass;
        Panel24.Cursor:=crHourGlass;
        Panel25.Cursor:=crHourGlass;
        Panel26.Cursor:=crHourGlass;
        Panel27.Cursor:=crHourGlass;
        Panel28.Cursor:=crHourGlass;
        Panel29.Cursor:=crHourGlass;
        Panel30.Cursor:=crHourGlass;
        Panel31.Cursor:=crHourGlass;
        Panel32.Cursor:=crHourGlass;
        Panel33.Cursor:=crHourGlass;
        Panel34.Cursor:=crHourGlass;
        Panel35.Cursor:=crHourGlass;
        Panel36.Cursor:=crHourGlass;
        Panel37.Cursor:=crHourGlass;
        Panel38.Cursor:=crHourGlass;
        Panel39.Cursor:=crHourGlass;
        Panel40.Cursor:=crHourGlass;
        Panel41.Cursor:=crHourGlass;
        Panel42.Cursor:=crHourGlass;
end;
procedure TFormPrincipal.Default;

begin
        Panel22.Cursor:=crDefault;
        Panel23.Cursor:=crDefault;
        Panel24.Cursor:=crDefault;
        Panel25.Cursor:=crDefault;
        Panel26.Cursor:=crDefault;
        Panel27.Cursor:=crDefault;
        Panel28.Cursor:=crDefault;
        Panel29.Cursor:=crDefault;
        Panel30.Cursor:=crDefault;
        Panel31.Cursor:=crDefault;
        Panel32.Cursor:=crDefault;
        Panel33.Cursor:=crDefault;
        Panel34.Cursor:=crDefault;
        Panel35.Cursor:=crDefault;
        Panel36.Cursor:=crDefault;
        Panel37.Cursor:=crDefault;
        Panel38.Cursor:=crDefault;
        Panel39.Cursor:=crDefault;
        Panel40.Cursor:=crDefault;
        Panel41.Cursor:=crDefault;
        Panel42.Cursor:=crDefault;
end;

procedure TFormPrincipal.Panel44Click(Sender: TObject);
begin
        MessageDlg('Esta função deverá ser criada pelo software aplicativo.'+chr(13)+
                   'Não se relaciona com a Impressora Fiscal.' + chr(13) , mtInformation, [mbOk], 0);
        LimpaMensagem1;

end;

procedure TFormPrincipal.FormActivate(Sender: TObject);
begin
        MessageDlg('Para o correto funcionamento deste Exemplo utilize a biblioteca'+chr(13)+
                   'CONNECT-C VERSÃO 5.8.1.0.' + chr(13) , mtInformation, [mbOk], 0);

        LimpaMensagem1;
        StatusBar1.Panels[0].Text:='Abrir Porta Serial.';
        StatusBar1.Panels[1].Text:='Aguarde ...';
        Refresh;
        if FileExists('C:\SWEDA\CONVERSOR.INI') then
        begin
                with Tinifile.Create('C:\SWEDA\CONVERSOR.INI') do
                begin
                        WriteString('Sistema','AssinarEAD','N');
                        WriteString('Sistema','ZAut','S');
                        WriteString('Sistema','LOG','S');
                end;
        end;

        Resposta:=ECF_AbrePortaSerial();
        StatusBar1.Panels[0].Text:=' ';
        StatusBar1.Panels[1].Text:=' ';

        if Resposta=1 then StatusBar1.Panels[0].Text:='Porta Serial ABERTA.'
        else begin
                ShowMessage('Não foi possível abrir a porta serial. Por favor verifique a impressora fiscal.');
                StatusBar1.Panels[0].Text:='Porta Serial NÃO ABERTA.';
        end;


end;

end.
